home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OExamples / TestPerf.mod < prev    next >
Encoding:
Text File  |  1995-07-03  |  5.3 KB  |  246 lines  |  [TEXT/MPS ]

  1. (*[n+,u+,r+,d+,#+,j=13-/40/1o,t=2,o=95] PasMat formatting options*)
  2. (*------------------------------------------------------------------------------
  3. FILE TestPerf.p
  4.  Copyright Apple Computer, Inc. 1985-1987
  5.  All rights reserved.
  6.  
  7. NAME
  8.   TestPerf
  9.  
  10. DESCRIPTION
  11.   This small tool demonstrates the use of the performance analysis tools.
  12. ------------------------------------------------------------------------------*)
  13. MODULE TestPerf;
  14.  
  15.  (*$SET doPerform TRUE*) (*set to false to omit Perform tools when debugging. *)
  16.  
  17.  (* $ Z**)
  18.  
  19.   IMPORT Types,
  20.         (*$IF doPerform*)
  21.         Write, Perf,
  22.         (*$END*)
  23.     (*needed for waste procedures, but not for Perf.p:*)
  24.        Quickdraw;
  25.  
  26.         (*$IF doPerform*)
  27.   VAR
  28.     ThePGlobals: Perf.TP2PerfGlobals;
  29.         (*$END*)
  30.         
  31.     (*[j=0] PasMat formatting option*)
  32.  
  33.     (* These are some procedures that "waste" time (W) in different amounts. *)
  34.  
  35.     (* First, some procedures that waste time in CODE segments: *)
  36.  
  37.     (*$S SEG1*)
  38.  
  39.   PROCEDURE W500A;
  40.  
  41.     VAR
  42.       i: INTEGER;
  43.       junk, junk1, junk2: (*integer*) LONGINT;
  44.  
  45.     BEGIN
  46.       FOR i := 1 TO 500 DO
  47.         junk := 1;
  48.         junk1 := junk * 5;
  49.         junk2 := (junk + junk1) * 5;
  50.       END;
  51.     END W500A;
  52.  
  53.   PROCEDURE W100;
  54.  
  55.     VAR
  56.       i: INTEGER;
  57.       junk, junk1, junk2: (*integer*) LONGINT;
  58.  
  59.     BEGIN
  60.       FOR i := 1 TO 100 DO
  61.         junk := 1;
  62.         junk1 := junk * 5;
  63.         junk2 := (junk + junk1) * 5;
  64.       END;
  65.     END W100;
  66.  
  67.   PROCEDURE W1500;
  68.  
  69.     VAR
  70.       i: INTEGER;
  71.       junk, junk1, junk2: (*integer*) LONGINT;
  72.  
  73.     BEGIN
  74.       FOR i := 1 TO 1500 DO
  75.         junk := 1;
  76.         junk1 := junk * 5;
  77.         junk2 := (junk + junk1) * 5;
  78.       END;
  79.     END W1500;
  80.  
  81.   (*$S SEG2*)
  82.  
  83.   PROCEDURE Waste;
  84.  
  85.     VAR
  86.       i: INTEGER;
  87.       junk, junk1, junk2: (*integer*) LONGINT;
  88.  
  89.     BEGIN
  90.       FOR i := 1 TO 1 DO
  91.         junk := 1;
  92.         junk1 := junk * 5;
  93.         junk2 := (junk + junk1) * 5;
  94.       END;
  95.     END Waste;
  96.  
  97.   PROCEDURE W500BwithAVeryLongName;
  98.  
  99.     VAR
  100.       i: INTEGER;
  101.       junk, junk1, junk2: (*integer*) LONGINT;
  102.  
  103.     BEGIN
  104.       FOR i := 1 TO 500 DO
  105.         junk := 1;
  106.         junk1 := junk * 5;
  107.         junk2 := (junk + junk1) * 5;
  108.       END;
  109.     END W500BwithAVeryLongName;
  110.  
  111.   (* Second, some procedures that waste time in ROM: *)
  112.  
  113.   (*$S ROMSEG1*)
  114.  
  115.   PROCEDURE ROMW500A;
  116.  
  117.     VAR
  118.       i: INTEGER;
  119.       junk, junk1, junk2: Types.Rect;
  120.       dontCare: BOOLEAN;
  121.  
  122.     BEGIN
  123.       FOR i := 1 TO 500 DO
  124.         Quickdraw.SetRect(junk, 100, 200, 300, 400);
  125.         Quickdraw.SetRect(junk1, 200, 300, 400, 500);
  126.         dontCare := Quickdraw.SectRect(junk, junk1, junk2);
  127.       END;
  128.     END ROMW500A;
  129.  
  130.   PROCEDURE ROMW100;
  131.  
  132.     VAR
  133.       i: INTEGER;
  134.       junk, junk1, junk2: Types.Rect;
  135.       dontCare: BOOLEAN;
  136.  
  137.     BEGIN
  138.       FOR i := 1 TO 100 DO
  139.         Quickdraw.SetRect(junk, 100, 200, 300, 400);
  140.         Quickdraw.SetRect(junk1, 200, 300, 400, 500);
  141.         dontCare := Quickdraw.SectRect(junk, junk1, junk2);
  142.       END;
  143.     END ROMW100;
  144.  
  145.   PROCEDURE ROMW1500;
  146.  
  147.     VAR
  148.       i: INTEGER;
  149.       junk, junk1, junk2: Types.Rect;
  150.       dontCare: BOOLEAN;
  151.  
  152.     BEGIN
  153.       FOR i := 1 TO 1500 DO
  154.         Quickdraw.SetRect(junk, 100, 200, 300, 400);
  155.         Quickdraw.SetRect(junk1, 200, 300, 400, 500);
  156.         dontCare := Quickdraw.SectRect(junk, junk1, junk2);
  157.       END;
  158.     END ROMW1500;
  159.  
  160.   (*$S ROMSEG2*)
  161.  
  162.   PROCEDURE ROMWaste;
  163.  
  164.     VAR
  165.       i: INTEGER;
  166.       junk, junk1, junk2: Types.Rect;
  167.       dontCare: BOOLEAN;
  168.  
  169.     BEGIN
  170.       FOR i := 1 TO 1 DO
  171.         Quickdraw.SetRect(junk, 100, 200, 300, 400);
  172.         Quickdraw.SetRect(junk1, 200, 300, 400, 500);
  173.         dontCare := Quickdraw.SectRect(junk, junk1, junk2);
  174.         END;
  175.     END ROMWaste;
  176.  
  177.   PROCEDURE ROMW500B;
  178.  
  179.     VAR
  180.       i: INTEGER;
  181.       junk, junk1, junk2: Types.Rect;
  182.       dontCare: BOOLEAN;
  183.  
  184.     BEGIN
  185.       FOR i := 1 TO 500 DO
  186.         Quickdraw.SetRect(junk, 100, 200, 300, 400);
  187.         Quickdraw.SetRect(junk1, 200, 300, 400, 500);
  188.         dontCare := Quickdraw.SectRect(junk, junk1, junk2);
  189.         END;
  190.     END ROMW500B;
  191.  
  192.   VAR
  193.     repeats: INTEGER;
  194.  
  195. (*$MAIN*)
  196.   BEGIN
  197.  
  198.         (*$IF doPerform*)
  199.     ThePGlobals := NIL;
  200.     IF ¬Perf.InitPerf(ThePGlobals,
  201.                                         4             (*ms*),
  202.                                         2                (*bytes*),
  203.                                         TRUE,        (*measure ROM code*)
  204.                                         TRUE,     (*measure application code*)
  205.                                         "CODE",    (*segments to measure*)
  206.                                         0,            (*let the performance tools calculate the ROM id*)
  207.                                         "",            (*let the performance tools find the ROM name*)
  208.                     FALSE,    (*don't measure RAM*)
  209.                                         0             (*low RAM*),
  210.                                         $1FFFFF    (*high RAM (2M)*),
  211.                                    16            (*default*) ) THEN
  212.         Write.String('Errors during InitPerf.'); Write.Ln;
  213.         HALT(1)
  214.         END;
  215.                 
  216.     IF Perf.PerfControl(ThePGlobals, TRUE) THEN (*turn on, throw away old state*) END;
  217.         (*$END*)
  218.  
  219.     FOR repeats := 1 TO 5 DO
  220.       (* waste some time in user Code/MUL4 *)
  221.       Waste;
  222.       W100;
  223.       W500A;
  224.       W500BwithAVeryLongName;
  225.       W1500;
  226.  
  227.       (* waste some time in ROM calls: *)
  228.       ROMWaste;
  229.       ROMW100;
  230.       ROMW500A;
  231.       ROMW500B;
  232.       ROMW1500;
  233.     END;
  234.  
  235.         (*$IF doPerform*)
  236.     IF Perf.PerfControl(ThePGlobals, FALSE) THEN (*turn off, throw away old state*) END;
  237.  
  238.     IF Perf.PerfDump(ThePGlobals, "Perform.out", FALSE, 80) # 0 THEN
  239.       Write.String('Errors during dump.'); Write.Ln
  240.     END;
  241.  
  242.     Perf.TermPerf(ThePGlobals);
  243.         (*$END*)
  244.  
  245. END TestPerf.
  246.